네트워크
네트워크분석_03_네트워크 탐지 룰
작성자 : Heehyeon Yoo|2025-11-10
# 네트워크# 스노트# 수리카타# 네트워크 탐지 룰
1. 실습 환경 구축
- OWASP-ZAP (Zed Attack Proxy): 공격자/진단자 역할. 브라우저와 웹 서버 간의 트래픽을 가로채고(프록시), 취약점을 자동/수동으로 스캔하는 도구.
- MetasploitableV2: 공격 대상(Victim) 서버. 의도적으로 다양한 보안 취약점을 내포하도록 구축된 리눅스 가상 머신. (DVWA, bWAPP 등 포함)
- Security Onion(16.04.x 버전): 침해 탐지 및 분석 시스템(IDS/SIEM). Snort(탐지 엔진), Snorby/Squert(경고 시각화), ELSA(로그 검색/분석) 등 다양한 오픈소스 보안 도구가 통합된 플랫폼
2. 웹 스캐너 주요 기능 실습
- Update/Proxy Setting: 플러그인 및 스캔 정책을 최신화하고, 브라우저(Firefox, Chrome 등)의 트래픽이 ZAP을 거치도록 프록시 설정.
- Port Scan/Spider: 대상 서버의 열린 포트 정보를 스캔하고, 웹사이트를 크롤링하여 사이트 구조(사이트맵)를 파악.
- Forced Browsing:
robots.txt나 Spider에서 발견되지 않는 숨겨진 디렉터리나 파일(e.g.,/admin,/backup)을 사전 파일 기반으로 강제 탐색. - Break: HTTP/HTTPS 요청(Request)과 응답(Response)을 전송 직전에 가로채서(Intercept) 헤더나 파라미터 값을 실시간으로 변조.
- Active Scan: 식별된 페이지와 파라미터를 대상으로 자동화된 공격 페이로드(SQLi, XSS 등)를 전송하여 능동적으로 취약점을 스캔.
- Scan Policy Manager: Active Scan 시 사용할 공격 유형(e.g., SQL Injection, XSS)과 스캔 강도(Low, Medium, High)를 조절하여 스캔 시간과 서버 부하를 관리.
- Encode/Decode/Hash: 전송 값을 Base64, URL, Hex 등으로 인코딩/디코딩하거나 MD5, SHA1 등으로 해시값을 생성. (우회 공격 시 유용)
- Report: 스캔 결과를 바탕으로 탐지된 취약점 목록, 위험도, 상세 내용을 포함하는 HTML, JSON, XML 형식의 보고서 생성.
3. 취약점 진단 및 패턴 분석 실습
- 사이트맵 획득: ZAP의 Spider 기능을 이용해 DVWA의 전체 페이지 구조 파악.
- 취약점 진단: Active Scan을 수행하여 Path Traversal, SQL 인젝션, XSS 등 6가지 주요 취약점 진단.
- 로그 획득: 피해자 서버(MetasploitableV2)의 웹 서버 로그(e.g.,
/var/log/apache2/access.log)에 접근하여 FTP 등을 이용해 분석 시스템으로 다운로드. - 로그 분석 (Notepad++): 로그 파일을 열어 ZAP Active Scan 시도가 서버에 어떤 HTTP 요청(공격 패턴)으로 기록되었는지 확인. (e.g.,
GET /dvwa/vulnerabilities/sqli/?id=' OR '1'='1' HTTP/1.1) - 교차 검증: ZAP의 스캔 결과(탐지된 취약점)와 서버 로그에 남은 실제 공격 흔적(패턴)을 비교 분석.
- 결과 보고서 추출: ZAP의 Report 기능을 사용해 분석된 취약점 현황을 공식 보고서 형태로 추출.
4. 분석 도구
- Snorby: Snort가 탐지한 경고(Alert)를 실시간으로 보여주는 웹 기반 대시보드. 이벤트의 심각도, 발생 시각, 출발지/목적지 IP 등을 직관적으로 모니터링.
- Squert: Snorby와 유사한 시각화 도구. 특히 이벤트 간의 연관 관계나 시계열(Timeline) 분석에 초점을 맞춘 인터페이스 제공.
- ELSA (Enterprise Log Search and Archive): 대규모 로그(Syslog, Snort 로그, 웹 로그 등)를 수집, 정규화, 저장, 검색하는 로그 관리 및 분석(SIEM) 도구. (16.04 버전의 핵심)
5. 스노트 소개와 규칙 구조 이해
- 스노트 소개: 실시간 트래픽 분석 및 패킷 로깅이 가능한 오픈소스 네트워크 침입 탐지 시스템(NIDS).
- 규칙 구조:
Rule Header(규칙 헤더) +Rule Option(규칙 옵션)- 규칙 헤더: 트래픽을 식별하는 기본 조건.
[Action] [Protocol] [Src IP] [Src Port] [Direction] [Dst IP] [Dst Port]- (예:
alert tcp $HOME_NET any -> $EXTERNAL_NET 80)
- 규칙 옵션: 패킷의 페이로드(내용)를 검사하는 세부 조건.
( )안에;로 구분하여 작성.msg:"경고 메시지";content:"탐지할 문자열";pcre:"/정규표현식/옵션";sid:[규칙 ID];rev:[규칙 버전];
- 규칙 헤더: 트래픽을 식별하는 기본 조건.
6. 정규표현식(PCRE) 이해
- Snort의
content옵션으로 탐지하기 어려운 복잡하거나 변형된(인코딩 등) 공격 패턴을 탐지하기 위해 사용하는 문법.pcre옵션에서 사용.- 메타문자:
.(임의의 한 글자),^(문자열 시작),$(문자열 끝),|(OR),[](문자 집합),()(그룹화). - 수량자: (0회 이상),
+(1회 이상),?(0 또는 1회),{n,m}(n회 이상 m회 이하). - 클래스:
\d(숫자),\w(알파벳/숫자/언더스코어),\s(공백 문자). - 추가 옵션 (PCRE 옵션):
i(대소문자 무시),m(다중 라인 모드). - 탐욕적(Greedy) vs. 게으른(Lazy) 수량자:
- 탐욕적 (기본):
.*(매칭 가능한 가장 긴 문자열).A...B가 있을 때A와 마지막B까지 매칭. - 게으른:
.*?(수량자 뒤에?추가. 매칭 가능한 가장 짧은 문자열).A...B...B가 있을 때A와 첫 번째B까지 매칭.
- 탐욕적 (기본):
- 메타문자:
7. Path Traversal(디렉터리 탐색)
- 패턴:
../(상위 디렉터리 이동) 문자열을 이용해 비인가된 파일(/etc/passwd)에 접근 시도. - 우회 패턴: URL 인코딩 (
..%2f또는..%5c), 이중 인코딩 (..%252f). - 스노트 분석/규칙:
content:"../";(가장 기본적인 탐지)pcre:"/\.\.%2[Ff]/i";(URL 인코딩/탐지)pcre:"/\.\.%5[Cc]/i";(URL 인코딩\탐지)http_uri;옵션을 추가하여 URI 영역에서만 검사하도록 한정.
8. SQL Injection
- 사용자의 입력값이 SQL 쿼리문의 일부로 사용되는 점을 악용.
- 인증 우회:
' OR '1'='1'-- - 데이터 탈취:
UNION SELECT,information_schema - 인코딩: 공백(
%20또는+), 작은따옴표(%27)
- 인증 우회:
- 스노트 분석:
pcre:"/('|\x27).*(OR|--|#|;)/i";(따옴표와 함께 주석/OR 구문 탐지)pcre:/UNION\s+SELECT/i;(UNION SELECT구문 탐지.\s+는 하나 이상의 공백 의미)
9. Directory Browsing
- 공격이 아닌 서버 설정 오류로, 웹 서버가 인덱스 파일(
index.html)이 없는 디렉터리의 파일 목록을 노출하는 현상. - 탐지 (서버 응답): 공격자의 요청이 아닌, 서버의 응답 패킷에 포함된 특정 문자열을 탐지.
"Index of /""Parent Directory"
- 스노트 분석/규칙: 방향성이 중요. (서버 -> 클라이언트)
alert tcp $EXTERNAL_NET 80 -> $HOME_NET any (msg:"Directory Browsing"; flow:to_client,established; content:"Index of /"; ...)
10. Remote OS Command Injection
- 웹 파라미터를 통해 OS 셸 명령어를 주입. 셸 메타 문자 사용.
- 주요 메타 문자:
;(앞 명령어 종료 후 뒷 명령어 실행)|,||(파이프라인, OR 조건)&,&&(백그라운드 실행, AND 조건)command또는$(command)(명령어 실행 결과 치환)
- 스노트 분석/규칙:
http_uri;옵션으로 URI 영역을 검사.pcre:"/[;\|&$()]/";` (URI 내에 셸 메타 문자가 포함되어 있는지 검사)
11. Cross Site Scripting
- 공격자가 삽입한 악성 스크립트(JavaScript)가 다른 사용자(피해자)의 브라우저에서 실행됨.
- 기본:
<script>alert(1)</script> - 우회 (이벤트 핸들러):
<img src=x onerror=alert(1)>,<svg onload=alert(1)> - 인코딩:
%3cscript%3e(<script>)
- 기본:
- 스노트 분석/규칙:
pcre:"/<script/i";(단순<script태그 탐지)pcre:"/on(error|load|click|mouseover)\s*=/i";(다양한 이벤트 핸들러 탐지)pcre:"/%3[Cc]script/i";(URL 인코딩된<script탐지)
12. Remote Code Execution - Shellshock
- CVE-2014-6271
- GNU Bash 셸에서 발견된 취약점. 특정 형식의 문자열이 환경 변수에 할당될 때, 변수 정의부 뒤에 오는 악성 코드가 의도치 않게 실행되는 원격 코드 실행(RCE) 취약점.
- 패턴: 주로 HTTP 요청 헤더(User-Agent, Cookie, Referer 등) 영역에
() { :; };라는 특정 문자열과 함께 실행할 명령어를 삽입.User-Agent: () { :; }; /bin/cat /etc/passwd
- 스노트 분석:
http_header;옵션을 사용해 HTTP 헤더 영역 검사.content:"() { :; };";(Shellshock 고유의 핵심 문자열 패턴 탐지)pcre:"/\(\)\s*\{[^\}]*\};\s*\w+/";(공백 등 변형을 고려한 정규표현식 탐지)